package Model.Abstract;

import Model.Interface.Model;
import Model.Interface.ModelMapper;

/**
 * Classe abstrata que define um tipo Model.
 * 
 * @author Grupo I
 * 
 */
public abstract class ModelAbstract implements Model {

	private String id;

	protected ModelMapper mapper;

	/**
	 * Remove um objeto
	 */
	public void remove() throws Exception {
		this.getMapper().remove(this);
	}

	/**
	 * Retorna o id od objeto
	 * 
	 * @return o id do objeto
	 */
	public String getId() {
		return this.id;
	}

	/**
	 * Seta o id do objeto
	 * 
	 * @param id
	 *            o novo id
	 */
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * Salva o model
	 * 
	 * @param model
	 *            o model a ser salvo
	 * @return O ID do objeto salvo.
	 * @throws Exception
	 */
	public String save() throws Exception {
		return this.getMapper().save(this);
	}

	/**
	 * Retorna o mapper do objeto
	 * 
	 * @return mapper do objeto
	 */
	public ModelMapper getMapper() {
		return this.mapper;
	}
}
